package com.maciek.integracja_aplikacji.bo.impl;

import com.maciek.integracja_aplikacji.bo.PersonBo;
import com.maciek.integracja_aplikacji.dao.PersonDao;
import com.maciek.integracja_aplikacji.dao.PersonalFileDao;
import com.maciek.integracja_aplikacji.model.ErrorCode;
import com.maciek.integracja_aplikacji.model.Person;
import com.maciek.integracja_aplikacji.model.PersonalFile;

public class PersonBoImpl implements PersonBo {

	PersonDao personDao;
	PersonalFileDao personalFileDao;
	
	public void setPersonDao(PersonDao personDao) {
		this.personDao = personDao;
	}
	
	public void setPersonalFileDao(PersonalFileDao personalFileDao) {
		this.personalFileDao = personalFileDao;
	}

	public ErrorCode persist(Person person) {
		
		try {
			if(personDao.findBy(null, null, person.getPesel()) == null) {
				personDao.save(person);
			}
			else {
				personDao.update(person);
			}
			
			
			for(PersonalFile personalFile : person.getPersonalFiles()) {
				if(personalFileDao.findBy(personalFile.getId()) == null) {
					personalFileDao.save(personalFile);
				}
				else {
					personalFileDao.update(personalFile);
				}
			}
			return ErrorCode.TRUE;
		} catch (Exception e) {
			e.printStackTrace();
			return ErrorCode.FAILURE;
		}
	}
	
	public ErrorCode delete(Person person) {
		try {
			for(PersonalFile personalFile : person.getPersonalFiles()) {
				if(personalFileDao.findBy(personalFile.getId()) != null) {
					personalFileDao.delete(personalFile);
				}
			}
			
			personDao.delete(person);
			return ErrorCode.TRUE;
		} catch (Exception e) {
			e.printStackTrace();
			return ErrorCode.FAILURE;
		}
	}
	
	public Person findBy(String firstName, String lastName, String pesel) {
		try {
			return personDao.findBy(firstName, lastName, pesel);
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}
}
